﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Joel.Vishnu.Presentacion.Vistas;
using Joel.Vishnu.Presentacion;
using Joel.Vishnu.Modelo.Entidades;

namespace Joel.Vishnu.Formularios
{
    public partial class GestionarFacturas : Form, IGestionarFacturas
    {
        #region Constructores

        public GestionarFacturas()
        {
            InitializeComponent();
            grdFacturaDetalle.AutoGenerateColumns = false;
            grdFacturaDetalle.DataSource = bsFacturaDetalle;
            presentador = new GestionarFacturasPresentador(this);
        }

        #endregion

        #region Atributos

        private GestionarFacturasPresentador presentador;

        #endregion

        #region Propiedades

        public String SubTotal
        {
            set { txtSubTotal.Text = value; }
        }

        public String Total
        {
            set { txtTotal.Text = value; }
        }

        public String Iva
        {
            get { return txtIva.Text; }
            set { txtIva.Text = value; }
        }

        public Int32 ClienteId
        {
            get { return (Int32)cboClientes.SelectedValue; }
        }

        public List<Cliente> ListaClientes
        {
            set
            {
                cboClientes.ValueMember = "Id";
                cboClientes.DisplayMember = "ApellidoNombre";
                cboClientes.DataSource = value;
            }
        }

        public Int32 EmpleadoId
        {
            get { return (Int32)cboEmpleados.SelectedValue; }
        }

        public List<Empleado> ListaEmpleados
        {
            set
            {
                cboEmpleados.ValueMember = "Id";
                cboEmpleados.DisplayMember = "ApellidoNombre";
                cboEmpleados.DataSource = value;
            }
        }

        public Int32 ProductoId
        {
            get { return (Int32)cboProductos.SelectedValue; }
        }

        public List<Producto> ListaProductos
        {
            set
            {
                cboProductos.ValueMember = "Id";
                cboProductos.DisplayMember = "Nombre";
                cboProductos.DataSource = value;
            }
        }

        public Int32 Cantidad
        {
            get { return Convert.ToInt32(numCantidad.Value); }
            set { numCantidad.Value = value; }
        }

        public List<FacturaDetalle> ListaFacturaDetalles
        {
            get { return (List<FacturaDetalle>)bsFacturaDetalle.DataSource; }
            set { bsFacturaDetalle.DataSource = value; }
        }

        public Int32 IndiceFacturaDetalleSeleccionada
        {
            get { return bsFacturaDetalle.Count > 0 ? bsFacturaDetalle.IndexOf(bsFacturaDetalle.Current) : -1; }
        }

        #endregion

        #region Eventos

        private void btnGestionar_Click(object sender, EventArgs e)
        {
            try
            {
                presentador.Gestionar();
                MessageBox.Show("Factura gestionada.");
                presentador.ResetearGestionFactura();
                cboClientes.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            try
            {
                presentador.AgregarDetalle();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnRemover_Click(object sender, EventArgs e)
        {
            try
            {
                presentador.RemoverDetalle();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void GestionarFacturas_Load(object sender, EventArgs e)
        {
            try
            {
                presentador.Inicializar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void numCantidad_Enter(Object sender, EventArgs e)
        {
            numCantidad.Select(0, numCantidad.Value.ToString().Length);
        }

        #endregion
    }
}
